<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>09 - 对象</title>
</head>
<body>
    <script>

        // 对象
        // ☛ 语法:    let 自定义对象名 = {};





        // A. 给对象赋值
        // ☛ 语法:
        //        let 自定义对象名 = {
        //            键: 值,
        //            键: 值
        //        };
        // ☛ 语法:
        //        对象.属性 = 值;
        // ☛ 语法:
        //        对象['属性'] = 值;





        // B. 使用对象中的值 (如何将对象中的值取出)
        // ☛ 通过   对象名.键         -----  写法比较常用
        // ☛ 通过   对象名['键']      -----  只有在遍历对象的时候才会使用

        // 代码演示:
        let laoduan = {
            uname: '对象中的值',
            myheight: 180,
            myage: 22,
            // 方法(匿名函数)
            sing: function(a) {
                console.log('呵呵呵...')
                // a 就是形参
                // console.log(a);
                // let num = 123;
                // return num;
            },
            eat: function() {
                console.log('该中午吃饭了....');
                let num = 123;
                return num;
            },
        };
        let ary = [laoduan];
        // 从数组中获取 uname 值
        console.log(laoduan.uname);
        // 从数组中获取 myheight 值
        console.log(laoduan['myheight']);
        // 从数组中获取 myage 值
        console.log(ary[0].myage);
        // 从数组中获取 方法 sing 值
        console.log(laoduan.sing());
        // 从数组中获取 方法 eat 值
        console.log(laoduan.eat());





        // C. 遍历对象
        // ☛ 语法:    
        //        for(key in 对象名) {
        //            console.log(对象名[key]);
        //        }





        // D. 向对象中新增一条数据
        // ☛ 语法:     对象名.键 = 值
        // ☛ 语法:     对象名['键'] = 值

        // 代码演示:
        let obj = {
            uname: '张三'
        }
        // 添加数据
        obj.age = 23;
        obj['myheight'] = 180;
        // 添加方法
        obj.eat = function() {
            console.log('添加方法')
        }
        obj['sing'] = function() {
            console.log('这是一个唱歌的方法');
        }
        obj.uname = '李四';     // 如果向对象中新增的值, 对象中已经有了, 表示修改
        // console.log(obj);





        // E. 面向对象       内置构造函数创建对象
        // ☛ 语法:     let 自定义对象名 = new Object();

        // 代码演示: 
        // 创建 zs 对象
        // 使用 js 基础阶段字母量方式
        let zs = {}
        // 使用内置构造函数创建对象
        let zs1 = new Object();
        // 要给 zs1 对象添加一个 name 属性
        // 给 zs1 对象添加一个 eat 方法
        zs1.name = '张三';
        zs1.eat = function() {
            console.log('吃饭方法')
        }
        console.log(zs);
        console.log(zs1);





        // F. 原型对象      构造函数的一个属性, 这个属性叫 prototype
        // ☛ 语法:     构造函数.prototype.方法名 = function(){}
        function Student() {}
        Student.prototype.eat = function() {
            console.log('这是一个公共的方法');
        }
        let ls = new Student();
        ls.eat();



    </script>
</body>
</html>